package com.matace.keychain.presentation.viewmodel;

import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import android.text.TextUtils;
import android.util.Patterns;
import com.matace.keychain.domain.RegisterUseCase;

/**
 * 注册界面的ViewModel
 * 负责处理注册相关的业务逻辑和UI状态管理
 */
public class RegisterViewModel extends ViewModel {
    private final RegisterUseCase registerUseCase;

    // 用户名输入框的数据
    private final MutableLiveData<String> username = new MutableLiveData<>("");
    // 邮箱输入框的数据
    private final MutableLiveData<String> email = new MutableLiveData<>("");
    // 密码输入框的数据
    private final MutableLiveData<String> password = new MutableLiveData<>("");
    // 确认密码输入框的数据
    private final MutableLiveData<String> confirmPassword = new MutableLiveData<>("");
    // 错误信息数据
    private final MutableLiveData<String> error = new MutableLiveData<>("");
    // 注册成功状态的数据
    private final MutableLiveData<Boolean> registerSuccess = new MutableLiveData<>(false);

    /**
     * 构造函数
     * @param registerUseCase 注册用例
     */
    public RegisterViewModel(RegisterUseCase registerUseCase) {
        this.registerUseCase = registerUseCase;
    }

    // Getter方法
    /**
     * 获取用户名的LiveData
     * @return 用户名的LiveData
     */
    public LiveData<String> getUsername() { return username; }
    /**
     * 获取邮箱的LiveData
     * @return 邮箱的LiveData
     */
    public LiveData<String> getEmail() { return email; }
    /**
     * 获取密码的LiveData
     * @return 密码的LiveData
     */
    public LiveData<String> getPassword() { return password; }
    /**
     * 获取确认密码的LiveData
     * @return 确认密码的LiveData
     */
    public LiveData<String> getConfirmPassword() { return confirmPassword; }
    /**
     * 获取错误信息的LiveData
     * @return 错误信息的LiveData
     */
    public LiveData<String> getError() { return error; }
    /**
     * 获取注册成功状态的LiveData
     * @return 注册成功状态的LiveData
     */
    public LiveData<Boolean> getRegisterSuccess() { return registerSuccess; }

    // Setter方法
    /**
     * 设置用户名
     * @param value 用户名值
     */
    public void setUsername(String value) { username.setValue(value); }
    /**
     * 设置邮箱
     * @param value 邮箱值
     */
    public void setEmail(String value) { email.setValue(value); }
    /**
     * 设置密码
     * @param value 密码值
     */
    public void setPassword(String value) { password.setValue(value); }
    /**
     * 设置确认密码
     * @param value 确认密码值
     */
    public void setConfirmPassword(String value) { confirmPassword.setValue(value); }

    /**
     * 执行注册操作
     * 验证输入数据的有效性，如果有效则调用注册用例进行注册
     */
    public void register() {
        String user = username.getValue() != null ? username.getValue().trim() : "";
        String mail = email.getValue() != null ? email.getValue().trim() : "";
        String pass = password.getValue() != null ? password.getValue().trim() : "";
        String confirm = confirmPassword.getValue() != null ? confirmPassword.getValue().trim() : "";

        if (TextUtils.isEmpty(user) || user.length() < 3) {
            error.setValue("用户名至少需要3位");
            registerSuccess.setValue(false);
            return;
        }
        if (TextUtils.isEmpty(mail) || !Patterns.EMAIL_ADDRESS.matcher(mail).matches()) {
            error.setValue("请输入有效的邮箱地址");
            registerSuccess.setValue(false);
            return;
        }
        if (TextUtils.isEmpty(pass) || pass.length() < 6) {
            error.setValue("密码至少需要6位");
            registerSuccess.setValue(false);
            return;
        }
        if (!pass.equals(confirm)) {
            error.setValue("两次输入的密码不一致");
            registerSuccess.setValue(false);
            return;
        }
        if (registerUseCase.register(user, mail, pass)) {
            registerSuccess.setValue(true);
        } else {
            error.setValue("注册失败");
            registerSuccess.setValue(false);
        }
    }
}